import {createRouter, createWebHashHistory} from 'vue-router'
import store from '@/store'
import axios from 'axios'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import config from "../config/config";

// 路由表
const routes = [
  {
    path: '/login',
    name: 'Login',
    component: () => import('../views/Login.vue')
  },
  {
    path: '/test',
    name: 'Test',
    component: () => import('../views/Test.vue')
  },
  {
    name: 'Portal',
    path: '/portal',
    component: () => import('../views/portal/Index.vue'),
    meta: {
      title: '首页'
    }
  }
]

// 创建路由
const router = createRouter({
  history: createWebHashHistory(),
  // history: createWebHistory(),
  routes
})

// 白名单
const whiteList = ['/login', '/portal']

// 路由拦截
router.beforeEach(async (to, from, next)=>{
  // console.log('******************路由拦截******************')
  NProgress.start() // 开始进度条
  // 如果用户已登录
  if(sessionStorage.getItem('token')) {
    // 如果是登录页，直接跳转到主页
    if(to.path == '/login') {
      next({ path: '/' })
    }
    // 如果不是登录页
    else {
      // 如果动态路由为空
      if(store.state.menus.routes.length == 0) {
        // 获取菜单列表
        let res = await axios.get(`${config.server}/menu/nav`, {
          headers: {
              authorization: sessionStorage.getItem('token')
          }
        })
        console.log('**************导航**************')
        console.log(res.data)
        console.log('**************导航**************')

        // 同步获取菜单数据
        await store.dispatch('GenerateRoutes', res.data.data).then((res) => {
          // 展开数据
          const {asyncRouter, renderRouter} = {...res}
          // 添加异步路由
          asyncRouter.forEach(v => {
              router.addRoute(v)
          })
          // 添加同步路由
          renderRouter.forEach(v => {
            router.addRoute(v)
          })
          // console.log('******************动态路由******************')
          // console.log(router.getRoutes())

          // 如果 addRoute 并未完成，路由守卫会一层一层的执行执行，直到 addRoute 完成，找到对应的路由
          next({ ...to, replace: true })
        })
      }
      // 如果已有路由
      else {
        next()
      }
    }
  }
  // 如果用户未登录
  else {
    // 免登录列表
    if(whiteList.includes(to.path)) {
      next()
    }
    // 跳转到登录页
    else {
      next({ path: '/login', query: { redirect: to.fullPath } })
    }
  }
})

router.afterEach(() => {
  NProgress.done()  // 进度条结束
})

export default router
